extends Node

# ======================================================
# 全局信号系统
# 提供游戏核心事件的跨系统通信机制
# ======================================================

#region 游戏生命周期事件
# ------------------------------------------------------
# 新游戏初始化完成时触发（所有数据重置后）
signal gs_game_initialized

# 游戏加载完成时触发（存档数据载入后）
signal gs_game_loaded

# 游戏存档完成时触发（数据写入磁盘后）
signal gs_game_saved

signal gs_gamedata_ready

signal gs_room_ready(room: Room)
#endregion

#region 单位生命周期事件
# ------------------------------------------------------
# 单位对象创建时触发
signal gs_unit_created(unit: Unit)

# 单位对象死亡时触发
signal gs_unit_died(unit: Unit)

signal gs_ally_hp_changed(unit: AllyBaseUnit, hp: int, old_hp: int)


signal gs_unit_attacked(attater: AllyBaseUnit, target: EnemyBaseUnit)

signal gs_ally_get_heal(healer: AllyBaseUnit, healed: AllyBaseUnit, heal: Heal)

signal gs_ally_take_damage(attaker: EnemyBaseUnit, target: AllyBaseUnit, skill: Skill, damage: Damage)

signal gs_ally_take_fatal_damage(attaker: EnemyBaseUnit, target: AllyBaseUnit, skill: Skill, damage: Damage)

signal gs_ally_deal_damage(target: EnemyBaseUnit, attacker: AllyBaseUnit, skill: Skill, damage: Damage)

signal gs_ally_deal_summon(summon: AllyBaseUnit, summoner: AllyBaseUnit)
#endregion


# 单位对象进入战斗时触发

#region 技能系统事件
# ------------------------------------------------------
# 技能对象初始化时触发
# @param skill: 完成初始化的技能对象
signal gs_skill_init(skill: Skill)

# 技能使用前触发（实际生效前最后修改时机）
# @param caster: 施法单位
# @param target: 目标单位
# @param skill: 即将使用的技能对象
signal gs_before_skill_used(caster: Unit, target: Unit, skill: Skill)

# 技能绑定施法者时触发
# @param caster: 被绑定的单位
# @param skill: 绑定完成的技能对象
signal gs_skill_set_caster(caster: Unit, skill: Skill)

# 技能进入冷却阶段时触发
# @param caster: 施法单位
# @param target: 目标单位
# @param skill: 触发冷却的技能对象
signal gs_skill_cooldown_started(caster: Unit, target: Unit, skill: Skill)

# 技能冷却完成时触发
# @param caster: 施法单位
# @param target: 目标单位
# @param skill: 结束冷却的技能对象
signal gs_skill_cooldown_ended(caster: Unit, target: Unit, skill: Skill)

# 单位全局冷却（GCD）结束时触发
# @param unit: 结束冷却的单位对象
signal gs_global_cooldown_ended(unit: Unit)
#endregion
